/**
* gtk_style_apply_default_background:
* @style:
+ * @cr:
* @window:
* @set_bg:
* @state_type:
*/
void
gtk_style_apply_default_background (GtkStyle *style,
+ cairo_t *cr,
GdkWindow *window,
- gboolean set_bg,
- GtkStateType state_type,
- const GdkRectangle *area,
- gint x,
- gint y,
- gint width,
- gint height)
+ GtkStateType state_type,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
{
- GdkRectangle new_rect, old_rect;
-
- if (area)
- {
- old_rect.x = x;
- old_rect.y = y;
- old_rect.width = width;
- old_rect.height = height;
-
- if (!gdk_rectangle_intersect (area, &old_rect, &new_rect))
- return;
- }
- else
- {
- new_rect.x = x;
- new_rect.y = y;
- new_rect.width = width;
- new_rect.height = height;
- }
-
- if (!style->bg_pixmap[state_type] ||
- GDK_IS_PIXMAP (window) ||
- (!set_bg && style->bg_pixmap[state_type] != (GdkPixmap*) GDK_PARENT_RELATIVE))
+ cairo_save (cr);
+
+ if (style->bg_pixmap[state_type] == (GdkPixmap*) GDK_PARENT_RELATIVE)
{
- cairo_t *cr = gdk_cairo_create (window);
+ GdkWindow *parent = gdk_window_get_parent (window);
+ int x_offset, y_offset;
- if (style->bg_pixmap[state_type])
+ if (parent)
{
- gdk_cairo_set_source_pixmap (cr, style->bg_pixmap[state_type], 0, 0);
- cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT);
+ gdk_window_get_position (window, &x_offset, &y_offset);
+ cairo_translate (cr, -x_offset, -y_offset);
+ gtk_style_apply_default_background (style, cr,
+ parent, state_type,
+ x + x_offset, y + y_offset,
+ width, height);
+ goto out;
}
else
gdk_cairo_set_source_color (cr, &style->bg[state_type]);
-
- gdk_cairo_rectangle (cr, &new_rect);
- cairo_fill (cr);
-
- cairo_destroy (cr);
}
- else
+ else if (style->bg_pixmap[state_type])
{
- if (set_bg)
- {
- if (style->bg_pixmap[state_type] == (GdkPixmap*) GDK_PARENT_RELATIVE)
- gdk_window_set_back_pixmap (window, NULL, TRUE);
- else
- gdk_window_set_back_pixmap (window, style->bg_pixmap[state_type], FALSE);
- }
-
- gdk_window_clear_area (window,
- new_rect.x, new_rect.y,
- new_rect.width, new_rect.height);
+ gdk_cairo_set_source_pixmap (cr, style->bg_pixmap[state_type], 0, 0);
+ cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT);
}
+ else
+ gdk_cairo_set_source_color (cr, &style->bg[state_type]);
+
+ cairo_rectangle (cr, x, y, width, height);
+ cairo_fill (cr);
+
+out:
+ cairo_restore (cr);
}
static GdkPixbuf *
gint width,
gint height)
{
+ cairo_t *cr;
gboolean is_spinbutton_box = FALSE;
sanitize_size (window, &width, &height);
}
}
+ cr = gdk_cairo_create (window);
+
+ if (area)
+ {
+ gdk_cairo_rectangle (cr, area);
+ cairo_clip (cr);
+ }
+
if (!style->bg_pixmap[state_type] ||
GDK_IS_PIXMAP (window))
{
- cairo_t *cr;
GdkColor *gc = &style->bg[state_type];
- cr = gdk_cairo_create (window);
-
if (state_type == GTK_STATE_SELECTED && detail && strcmp (detail, "paned") == 0)
{
if (widget && !gtk_widget_has_focus (widget))
gc = &style->base[GTK_STATE_ACTIVE];
}
- if (area)
- {
- gdk_cairo_rectangle (cr, area);
- cairo_clip (cr);
- }
-
_cairo_draw_rectangle (cr, gc, TRUE,
x, y, width, height);
- cairo_destroy (cr);
}
else
- gtk_style_apply_default_background (style, window,
- widget && gtk_widget_get_has_window (widget),
- state_type, area, x, y, width, height);
+ gtk_style_apply_default_background (style, cr, window,
+ state_type, x, y, width, height);
+
if (is_spinbutton_box)
{
- cairo_t *cr;
GdkColor *upper;
GdkColor *lower;
- cr = gdk_cairo_create (window);
-
lower = &style->dark[state_type];
if (shadow_type == GTK_SHADOW_OUT)
upper = &style->light[state_type];
return;
}
+ cairo_destroy (cr);
+
gtk_paint_shadow (style, window, state_type, shadow_type, area, widget, detail,
x, y, width, height);
gint width,
gint height)
{
+ cairo_t *cr;
GdkColor *gc1;
GdkColor *freeme = NULL;
sanitize_size (window, &width, &height);
+ cr = gdk_cairo_create (window);
+
+ cairo_set_line_width (cr, 1.0);
+
+ if (area)
+ {
+ gdk_cairo_rectangle (cr, area);
+ cairo_clip (cr);
+ }
+
if (detail)
{
int trimmed_len = strlen (detail);
if (!style->bg_pixmap[state_type] || gc1 != &style->bg[state_type] ||
GDK_IS_PIXMAP (window))
{
- cairo_t *cr;
-
- cr = gdk_cairo_create (window);
- cairo_set_line_width (cr, 1.0);
-
- if (area)
- {
- gdk_cairo_rectangle (cr, area);
- cairo_clip (cr);
- }
-
_cairo_draw_rectangle (cr, gc1, TRUE,
x, y, width, height);
if (detail && !strcmp ("tooltip", detail))
_cairo_draw_rectangle (cr, &style->black, FALSE,
x, y, width - 1, height - 1);
-
- cairo_destroy (cr);
}
else
- gtk_style_apply_default_background (style, window,
- widget && gtk_widget_get_has_window (widget),
- state_type, area, x, y, width, height);
+ gtk_style_apply_default_background (style, cr, window,
+ state_type, x, y, width, height);
+ cairo_destroy (cr);
+
if (freeme)
gdk_color_free (freeme);
}
sanitize_size (window, &width, &height);
- gtk_style_apply_default_background (style, window,
- widget && gtk_widget_get_has_window (widget),
- state_type, area, x, y, width, height);
-
cr = gdk_cairo_create (window);
if (area)
{
cairo_clip (cr);
}
+ gtk_style_apply_default_background (style, cr, window,
+ state_type, x, y, width, height);
+
switch (shadow_type)
{
case GTK_SHADOW_NONE:
sanitize_size (window, &width, &height);
+ cr = gdk_cairo_create (window);
+ if (area)
+ {
+ gdk_cairo_rectangle (cr, area);
+ cairo_clip (cr);
+ }
+
switch (gap_side)
{
case GTK_POS_TOP:
- gtk_style_apply_default_background (style, window,
- widget && gtk_widget_get_has_window (widget),
- state_type, area,
+ gtk_style_apply_default_background (style, cr, window,
+ state_type,
x + 1,
y,
width - 2,
height - 1);
break;
case GTK_POS_BOTTOM:
- gtk_style_apply_default_background (style, window,
- widget && gtk_widget_get_has_window (widget),
- state_type, area,
+ gtk_style_apply_default_background (style, cr, window,
+ state_type,
x + 1,
y + 1,
width - 2,
height - 1);
break;
case GTK_POS_LEFT:
- gtk_style_apply_default_background (style, window,
- widget && gtk_widget_get_has_window (widget),
- state_type, area,
+ gtk_style_apply_default_background (style, cr, window,
+ state_type,
x,
y + 1,
width - 1,
height - 2);
break;
case GTK_POS_RIGHT:
- gtk_style_apply_default_background (style, window,
- widget && gtk_widget_get_has_window (widget),
- state_type, area,
+ gtk_style_apply_default_background (style, cr, window,
+ state_type,
x + 1,
y + 1,
width - 1,
break;
}
-
- cr = gdk_cairo_create (window);
- if (area)
- {
- gdk_cairo_rectangle (cr, area);
- cairo_clip (cr);
- }
-
switch (shadow_type)
{
case GTK_SHADOW_NONE: